n, m = map(int, input().split())
a = [i for i in range(n)] # a[i]代表第i个人
a[0] = n # a[0]代表最后一个人
dp = [[0 for j in range(n + 1)] for i in range(m + 1)] # 第i次在第j个人手里的可能。
dp[0][1] = 1 # 第0次在第1个人手中
for i in range(1, m + 1):
    for j in range(n):
        # 第i次第j个人手中的，等于第i-1次第j-1那个人手中的和第j+1那个人手中的
        dp[i][a[j]] = dp[i - 1][a[(j + n - 1) % n]] + dp[i - 1][a[(j + 1) % n]]
print(dp[m][1])
'''
# 其实不要a数组也可以，直接这样就行。加a数组是为了更符合现实？
n, m = map(int, input().split())
dp = [[0 for j in range(n)] for i in range(m + 1)] # 第i次在第j个人手里的可能。
dp[0][1] = 1 # 第0次在第1个人手中
for i in range(1, m + 1):
    for j in range(n):
        # 第i次第j个人手中的，等于第i-1次第j-1那个人手中的和第j+1那个人手中的
        dp[i][j] = dp[i - 1][(j + n - 1) % n] + dp[i - 1][(j + 1) % n]
print(dp[m][1])
'''
'''
话说做到这个题的时候，我思考了一下，为什么这道题左右都可以走，却不用担心统计次数受影响
我想，我是不是可以把前面的走迷宫那道题，改成类似这个的问你多少步内从xx走到yy的方法数。
然后我意识到了，哦，动态规划的问题的话，是有一个前提的，那就是，走过的路之后还可以走。
这样的题就更适合用动态规划来做。恩，可以出一道试试。应该会有人用bfs吧。
如果需要保证走过的路不要走，并且用动态规划的话，那就必须保证方向不变。比如前面我们做到的题，都是只能往右下走之类的。
'''
# -------------------------------------------------------------------------------

# 比赛环境为python3.8.6版本自带的IDLE，最好早点熟悉一下。。这个东西的提示时有时无

# 菜单栏最右边的Help的Python Docs 比赛时候也可以看，不过建议还是提前多了解了解，

# 比赛的时候至少知道在文档找什么能用的上。

# IDLE是下载Python时自带的，在按住win+s搜索IDLE就能搜到了。

# 然后点左上角的File可以创建新文件，然后按F5可以运行。
